﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;

namespace AT.IBMS.Framework.Controls
{

    public partial class AspNetPager
    {
        #region IPostBackEventHandler Implementation

        /// <summary>
        /// 实现<see cref="IPostBackEventHandler" /> 接口，使 <see cref="AspNetPager" /> 控件能够处理将窗体发送到服务器时引发的事件。
        /// </summary>
        /// <param name="args">表示要传递到事件处理程序的可选事件参数的 String。</param>
        public void RaisePostBackEvent(string args)
        {
            int pageIndex = CurrentPageIndex;
            try
            {
                if (string.IsNullOrEmpty(args))
                    args = inputPageIndex;
                pageIndex = int.Parse(args);
            }
            catch
            {
            }
            PageChangingEventArgs pcArgs = new PageChangingEventArgs(pageIndex);
            if (cloneFrom != null)
                cloneFrom.OnPageChanging(pcArgs);
            else
                OnPageChanging(pcArgs);
        }

        #endregion

        #region IPostBackDataHandler Implementation

        /// <summary>
        /// 实现 <see cref="IPostBackDataHandler" /> 接口，为 <see cref="AspNetPager" /> 服务器控件处理回发数据。
        /// </summary>
        /// <param name="pkey">控件的主要标识符。</param>
        /// <param name="pcol">所有传入名称值的集合。</param>
        /// <returns>如果服务器控件的状态在回发发生后更改，则为 true；否则为 false。</returns>
        public virtual bool LoadPostData(string pkey, NameValueCollection pcol)
        {
            string str = pcol[UniqueID + "_input"];
            if (str != null && str.Trim().Length > 0)
            {
                try
                {
                    int pindex = int.Parse(str);
                    if (pindex > 0 && pindex <= PageCount)
                    {
                        inputPageIndex = str;
                        Page.RegisterRequiresRaiseEvent(this);
                    }
                }
                catch
                {
                }
            }
            return false;
        }

        /// <summary>
        /// 实现 <see cref="IPostBackDataHandler" /> 接口，用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。
        /// </summary>
        public virtual void RaisePostDataChangedEvent()
        {
        }

        #endregion
    }

}
